package com.baize.baizeapp

import android.app.Application
import android.content.Context
import android.util.Log
import com.pandora.common.env.Env
import com.pandora.ttlicense2.LicenseManager
import com.squareup.leakcanary.LeakCanary
import com.ss.ttvideoengine.DataLoaderHelper
import com.ss.ttvideoengine.TTVideoEngine
import com.ss.ttvideoengine.utils.TTVideoEngineLog
import java.io.File


class App : Application() {

    companion object {
        private lateinit var instance: App

        @JvmStatic
        fun getInstance() = instance
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
        if (!LeakCanary.isInAnalyzerProcess(this)) {
            LeakCanary.install(this)
        }

        // 一. 初始化点播 SDK
        TTVideoEngineLog.turnOn(TTVideoEngineLog.LOG_DEBUG, 1); // 1 打开 0 关闭
        // 1. 初始化 TTSDK 环境
        Env.setupSDKEnv(object : Env.SdkContextEnv {
            override fun getApplicationContext(): Context {
                return this@App.applicationContext
            }

            override fun getUncaughtExceptionHandler(): Thread.UncaughtExceptionHandler {
                return object : Thread.UncaughtExceptionHandler {
                    override fun uncaughtException(t: Thread, e: Throwable) {
                    }
                }
            }

            override fun getAppID(): String {
                return "225112"
            }

            override fun getAppName(): String {
                return "videotest"
            }

            override fun getAppRegion(): String {
                return "cn-north-1"
            }
        })

        // 初始化 License 模块
        // 开启 License 模块 logcat 输出，排查问题可以开启，release 包不建议开启
         LicenseManager.turnOnLogcat(true)
        // 初始化 license 2.0 的 LicenseManager
        LicenseManager.init(this)
        // license 2.0 的授权文件支持从 assets 文件夹中直接读取，无需拷贝到存储
        // 下面 assets Licenseuri 对应工程中 assets 路径为：assets/license2/license2_test.lic
        val assetsLicenseUri = "assets:///license2_test.lic"
        // 将 license uri 添加到 LicenseManager 中即可完成授权文件添加
        LicenseManager.getInstance().addLicense(assetsLicenseUri,
            object : LicenseManager.Callback {
                override fun onLicenseLoadSuccess(p0: String, p1: String) {
                    Log.i("yanze", "onLicenseLoadSuccess: ${p0} ${p1}")
                }

                override fun onLicenseLoadError(p0: String, p1: Exception, p2: Boolean) {
                    Log.i("yanze", "onLicenseLoadError: ${p0} ${p1.message} ${p2}")
                }

                override fun onLicenseLoadRetry(p0: String) {
                    Log.i("yanze", "onLicenseLoadRetry: ${p0} ")
                }

                override fun onLicenseUpdateSuccess(p0: String, p1: String) {
                    Log.i("yanze", "onLicenseUpdateSuccess: ${p0} ${p1}")
                }

                override fun onLicenseUpdateError(p0: String, p1: Exception, p2: Boolean) {
                    Log.i("yanze", "onLicenseUpdateError: ${p0} ${p1.message} ${p2}")
                }

                override fun onLicenseUpdateRetry(p0: String) {
                    Log.i("yanze", "onLicenseUpdateRetry: ${p0}")
                }
            })

        // 初始化 TTVideoEngine & AppLog
        // 下面填写的参数仅供释义，请填写您自己的参数
        // 下面填写的参数仅供释义，请填写您自己的参数
        val appinfoMap: MutableMap<String, Any> = HashMap()
        appinfoMap["appname"] = "videotest"
        appinfoMap["appid"] = 225112 // your app id

        appinfoMap["appchannel"] = "test_channel" // 设为test_channel不会展示日志

        appinfoMap["region"] = "cn-north-1"
        appinfoMap["appversion"] = BuildConfig.VERSION_NAME
        // 初始化点播
        TTVideoEngine.setAppInfo(applicationContext, appinfoMap)
        // 初始化点播依赖的 AppLog SDK
        TTVideoEngine.initAppLog()

        // 初始化数据加载模块
        //  视频缓存文件夹路径
        //  视频缓存文件夹大小
        val videoCacheDir = File(getCacheDir(), "video_cache")
        if (!videoCacheDir.exists()) videoCacheDir.mkdirs()
        // 设置视频缓存文件夹路径, 需保障路径是存在的
        TTVideoEngine.setStringValue(
            DataLoaderHelper.DATALOADER_KEY_STRING_CACHEDIR,
            videoCacheDir.getAbsolutePath()
        )
        // 设置视频缓存文件夹大小
        TTVideoEngine.setIntValue(
            DataLoaderHelper.DATALOADER_KEY_INT_MAXCACHESIZE,
            300 * 1024 * 1024
        ) // 300MB
        // 开启 MDL
        try {
            TTVideoEngine.startDataLoader(this)
        } catch (e: java.lang.Exception) {
            // 缓存模块开启失败
            e.printStackTrace()
            Log.i("yanze","MDL缓存模块开启失败:${e.message}")
        }

        // TTVideoEngine 实例需设置 MDL 的 Options 才能使用 MDL 进行视频数据加载
        // ttVideoEngine.setIntOption(PLAYER_OPTION_ENABLE_DATALOADER, 1);
    }

}